package es.componentes;

import es.entidades.Entidad;
/**
 * Clase abstracta que representa un Componente. Todos los componentes deben heredar de esta clase.
 * @author Miguel Vicente
 */
public abstract class Componente {

	private static int SIGUIENTE_ID = 0;
	
	private int id;
	protected Entidad entidad;
	
	/**
	 * Constructor. Crea un nuevo Componente.
	 * @param tipo Identificador comun para todos los componentes del mismo tipo
	 * @param entidad Entidad a la que pertenece el componente
	 */
	public Componente(Entidad entidad) {
		this.id = SIGUIENTE_ID++;
		this.entidad = entidad;
	}
	/**
	 * Devuelve el tipo de componente. Todos los componentes deben implementar este metodo para
	 * poder ser agrupados por tipo.
	 * @return Tipo del componente
	 */
	public abstract String getTipo();
	/**
	 * Devuelve el ID del componente. Es un identificador unico del componente.
	 * @return ID del componente
	 */
	public int getId() {
		return id;
	}
	/**
	 * Devuelve la entidad a la que esta asociado este componente.
	 * @return Entidad
	 */
	public Entidad getEntidad() {
		return entidad;
	}
	/**
	 * Asigna una Entidad a este componente.
	 * @param entidad Entidad a asignar
	 */
	public void setEntidad(Entidad entidad) {
		this.entidad= entidad;
	}
	
	@Override
	public String toString() {
		return "ID: " + id + ", Tipo: " + getTipo() + ", Entidad: [ID: " + entidad.getId() + ", Tipo: " + entidad.getTipo() + "]";
	}
		
}
